-
Notifications
You must be signed in to change notification settings - Fork 13.7k
When a trait isn't implemented, but another similar impl is found, point at it #145640
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
r? @nnethercote rustbot has assigned @nnethercote. Use |
cc @Muscraft This PR modifies |
This comment has been minimized.
This comment has been minimized.
3967b4e
to
c6c62f4
Compare
This comment has been minimized.
This comment has been minimized.
Looks fine, r=me once everything is green. |
c6c62f4
to
a05bf52
Compare
This comment has been minimized.
This comment has been minimized.
This comment was marked as resolved.
This comment was marked as resolved.
a05bf52
to
3f07cda
Compare
This comment has been minimized.
This comment has been minimized.
@bors r=nnethercote |
@bors r- (has merge conflicts) |
☔ The latest upstream changes (presumably #145706) made this pull request unmergeable. Please resolve the merge conflicts. |
…int at it: ``` error[E0277]: the trait bound `u32: Trait` is not satisfied --> $DIR/trait_objects_fail.rs:26:9 | LL | foo(&10_u32); | ^^^^^^^ the trait `Trait` is not implemented for `u32` | help: the trait `Trait<12>` is not implemented for `u32` but trait `Trait<2>` is implemented for it --> $DIR/trait_objects_fail.rs:7:1 | LL | impl Trait<2> for u32 {} | ^^^^^^^^^^^^^^^^^^^^^ = note: required for the cast from `&u32` to `&dyn Trait` ``` Pointing at the `impl` definition that *could* apply given a different self type is particularly useful when it has a blanket self type, as it might not be obvious and is not trivially greppable: ``` error[E0277]: the trait bound `RawImpl<_>: Raw<_>` is not satisfied --> $DIR/issue-62742.rs:4:5 | LL | WrongImpl::foo(0i32); | ^^^^^^^^^ unsatisfied trait bound | help: the trait `Raw<_>` is not implemented for `RawImpl<_>` but trait `Raw<[_]>` is implemented for it --> $DIR/issue-62742.rs:29:1 | LL | impl<T> Raw<[T]> for RawImpl<T> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ note: required by a bound in `SafeImpl` --> $DIR/issue-62742.rs:33:35 | LL | pub struct SafeImpl<T: ?Sized, A: Raw<T>>(PhantomData<(A, T)>); | ^^^^^^ required by this bound in `SafeImpl` ```
…them ``` error[E0277]: the trait bound `[[u16; 3]; 2]: Bar` is not satisfied --> $DIR/issue-67185-2.rs:21:6 | LL | impl Foo for FooImpl {} | ^^^ the trait `Bar` is not implemented for `[[u16; 3]; 2]` | help: the following other types implement trait `Bar` --> $DIR/issue-67185-2.rs:9:1 | LL | impl Bar for [u16; 4] {} | ^^^^^^^^^^^^^^^^^^^^^ `[u16; 4]` LL | impl Bar for [[u16; 3]; 3] {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `[[u16; 3]; 3]` note: required by a bound in `Foo` --> $DIR/issue-67185-2.rs:14:30 | LL | trait Foo | --- required by a bound in this trait LL | where LL | [<u8 as Baz>::Quaks; 2]: Bar, | ^^^ required by this bound in `Foo` ```
3f07cda
to
898ddc3
Compare
This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
Pointing at the
impl
definition that could apply given a different self type is particularly useful when it has a blanket self type, as it might not be obvious and is not trivially greppable: